#ifndef _EASY_SHELL_H_
#define _EASY_SHELL_H_

#include "stdbool.h"
#include "stdint.h"
#include "string.h"
#include "stdio.h"

// <<< Use Configuration Wizard in Context Menu >>>
// <o>Set maximum shell command cache size 命令行输入长度最大值
//  <i>Default: 16
//  <16=> 16 Bytes
//  <32=> 32 Bytes
//  <64=> 64 Bytes
//  <128=> 128 Bytes
#define ES_CMD_LENGTH_MAX                    16


// <e>cmd brief 命令说明
#define ES_CMD_BRIEF_ENABLE                   1
// </e>

// <e>TAB automatic completion 自动补全
#define ES_TAB_ENABLE                         1
// </e>

// <e>Cursor move 光标左右移动
#define ES_CURSOR_MOVE_ENABLE                 1
// </e>

// <o>Set cmd num max 限制程序最大值
//  <i>Default: 8
//  <1-32>
#define ES_CMD_MAX                               8

// <o>Set cmd parameters max 程序参数最大值
//  <i>Default: 3
//  <0-8>
#define ES_CMD_PARA_MAX                          3


// <e>App variableView 是否使用变量查看器
#define ES_VARIABLE_ENABLE                    1

#if ES_VARIABLE_ENABLE == 1
// <o>set variable max 变量查看器容纳变量最大值
//  <i>Default: 5
//  <1-32>
#define ES_VARIABLE_MAX                        8
// <o>set variable show name length 变量查看器中变量名称长度最大值
//  <i>Default: 16
//  <8-32>
#define ES_VARIABLE_NAME_MAX                   12

#endif
// </e>
// <<< end of configuration section >>>

typedef int(*cmdFunc_t)(int, char**);

typedef struct{
    char *pName;
#if ES_CMD_BRIEF_ENABLE == 1
    char *pBrief;
#endif
    cmdFunc_t pFunc;
}shellCmdTypedef;

#define VAR_TYPE_INT_32   0
#define VAR_TYPE_FLOAT    1

void easyShellInit(void (*pUartSend)(char*,uint16_t));
void easyShellReceiveData(uint8_t dat);
bool easyShellAddCmd(shellCmdTypedef info);

void easyShellLoop(void);
void easyShellTick(uint16_t cycleMs);
#if ES_VARIABLE_ENABLE == 1
void easyShellCmdVariableAdd(uint8_t num,uint8_t* showName,uint8_t varType,void* var,uint8_t decHex);
#endif

/*
//编写用户app函数
//添加命令样例
int led(int argc, char** argv)
{
    int i;
    for(i=0;i<argc;i++)
    {
        usartSend(USART1,argv[i],strlen(argv[i]));
    }
}
//添加app到shell中
easyShellAddCmd("led",led);

//使用
单击tab自动补全命令
双击tab自动显示命令列表
输入程序名称，回车，可运行程序
ctrl+c 退出运行的程序

//变量查看器
1、easyShellCmdVariableAdd添加变量
2、输入var即可运行变量查看器

*/


#endif //_EASY_SHELL_H_
